package com.eonmind.common.provider.entity.vip;


import com.eonmind.common.contract.enums.DelEnum;
import com.mongoplus.annotation.ID;
import com.mongoplus.annotation.collection.CollectionName;
import com.mongoplus.enums.IdTypeEnum;
import lombok.*;
import lombok.experimental.Accessors;
import lombok.experimental.FieldNameConstants;

import java.util.List;

/**
 * 用户套餐
 */
@Data
@CollectionName("userWelfare")
@FieldNameConstants
@AllArgsConstructor
@NoArgsConstructor
@Builder
@Accessors(chain = true)
@ToString
public class UserWelfare {
    /**
     * 用户-套餐唯一标识 - MongoDB自动生成的ObjectId
     */
    @ID(type = IdTypeEnum.AUTO)
    private Long id;

    /**
     * 用户标识
     */
    private Long userId;


    /**
     * 当前活跃订阅ID列表 - 用户当前有效的订阅关系
     * 注意: 一个用户可以有多个同时生效的套餐
     * 示例: ["507f1f77bcf86cd799439012", "507f1f77bcf86cd799439013"]
     */
    private List<Long> activeSubscriptionIds;

    /**
     * 订阅历史ID列表 - 包含所有历史订阅记录
     * 示例: ["507f1f77bcf86cd799439012", "507f1f77bcf86cd799439013"]
     */
    private List<Long> subscriptionHistoryIds;

    /**
     * 缓存权益信息 - 定期计算的用户权益汇总，提升查询性能
     */
    private CachedFeatures cachedFeatures;


    // 创建时间
    private Long createTime;

    // 更新时间
    private Long updateTime;

    // 是否删除
    private Integer del = DelEnum.UN_DEL.getCode();

    /**
     * 缓存权益内部类 - 存储计算后的用户权益汇总
     */
    @Data
    @Accessors(chain = true)
    public static class CachedFeatures {
        /**
         * 每日拉币数量 - 取所有活跃套餐中的最大值
         * 示例: 250000
         */
        private Integer dailyCoins;

        /**
         * 拉币总余额 - 当前拉币总数
         * 示例: 3500000
         */
        private Integer totalCoins;

        /**
         * 拉币总余额 - 累计获得的所有拉币总数
         * 示例: 3500000
         */
        private Integer allCoins;

        /**
         * 拉币总余额 - 已使用的积分数
         * 示例: 3500000
         */
        private Integer usedCoins;

        /**
         * 功能权限集合 - 合并所有活跃套餐的权限
         */
        private Features features;

        /**
         * 功能权限详情 - 具体功能权限开关
         */
        @Data
        @Accessors(chain = true)
        public static class Features {
            /**
             * 聊天功能权限 - 是否可以无限使用聊天功能
             * 示例: true
             */
            private Integer chat;

            /**
             * 绘画功能权限 - 是否可以无限使用绘画功能
             * 示例: true
             */
            private Integer drawing;

            /**
             * 视频功能权限 - 是否可以访问视频资源
             * 示例: true
             */
            private Integer video;

        }
    }
}
